package org.ricks.action;


import java.io.Serial;

/**
 * 业务框架 异常消息
 * <pre>
 *     关于异常机制的解释可以参考这里:
 *     https://www.yuque.com/iohao/game/avlo99
 * </pre>
 */
public class MsgException extends RuntimeException {
    @Serial
    private static final long serialVersionUID = -4977523514509693190L;

    /** 异常消息码 */
    final short msgCode;

    public MsgException(short msgCode, String message) {
        super(message);
        this.msgCode = msgCode;
    }

    public MsgException(MsgExceptionInfo msgExceptionInfo) {
        this(msgExceptionInfo.getCode(), msgExceptionInfo.getMsg());
    }

    public short getMsgCode() {
        return msgCode;
    }


    /**
     * 优化异常性能 不收集堆栈信息
     * 测试下来 百万次 耗时 50ms 左右
     * @return
     */
    @Override
    public synchronized Throwable fillInStackTrace() {
        return this; // 不收集任何堆栈信息
    }
}
